using System;
using Gtk;
using System.IO;

public partial class MainWindow : Gtk.Window
{
	public MainWindow () : base(Gtk.WindowType.Toplevel)
	{
		Build ();
	}

	protected void OnDeleteEvent (object sender, DeleteEventArgs a)
	{
		Application.Quit ();
		a.RetVal = true;
	}
	string ruta;
	void Cerrar(){
		MessageDialog dialogo = new MessageDialog(this, DialogFlags.Modal, MessageType.Question,ButtonsType.YesNo,"¿Desea Guardar?");
			ResponseType question = (ResponseType)dialogo.Run();
			 
			if (question == ResponseType.Yes){ 
				dialogo.Destroy();
				Guardar(ruta);
				Application.Quit();
			} else { 
				dialogo.Destroy();
				Application.Quit();
			}				
	}
	
	void Nuevo(){
		if(textview.Buffer.Text != ""){
			MessageDialog dialogo = new MessageDialog(this, DialogFlags.Modal, MessageType.Question,ButtonsType.YesNo,"¿Desea Guardar?");
			ResponseType question = (ResponseType)dialogo.Run();
			 
			if (question == ResponseType.Yes){ 
				dialogo.Destroy();
				Guardar(ruta);
				ruta = "";
				textview.Buffer.Text = "";
			} else { 
				dialogo.Destroy();
				ruta = "";
				textview.Buffer.Text = "";
			}			
		}
	}
	
	string Abrir(){
		FileChooserDialog fileChooserDialog = new FileChooserDialog("Abrir archivo",this,
		                                                            FileChooserAction.Open,
		                                                            "Cancelar",ResponseType.Cancel,
		                                                            "Abrir",ResponseType.Accept
		                                                            );	
		
		if(fileChooserDialog.Run() == (int)ResponseType.Accept){
			System.IO.StreamReader lectFichero = new System.IO.StreamReader(fileChooserDialog.Filename);
			textview.Buffer.Text = lectFichero.ReadToEnd();
			lectFichero.Close();			
		}
		string Archivo = fileChooserDialog.Filename;
		fileChooserDialog.Destroy();
		ruta = Archivo;
		return Archivo; 
	}
	
	void Guardar(string Archivo){
		if(string.IsNullOrEmpty(Archivo)){
			GuardarComo();
		}else{
			System.IO.StreamWriter salvar = new System.IO.StreamWriter(Archivo);
			salvar.Write(textview.Buffer.Text);
			salvar.Close();
		}
	}
	
	void GuardarComo(){
		FileChooserDialog fileChooserDialog = new FileChooserDialog("Guardar archivo",this,
		                                                            FileChooserAction.Save,
		                                                            "Cancelar",ResponseType.Cancel,
		                                                            "Guardar",ResponseType.Accept
				                                                   );
		
		if(fileChooserDialog.Run() == (int)ResponseType.Accept){
			Guardar(fileChooserDialog.Filename);
		}
		
		fileChooserDialog.Destroy();
	}	

	
	protected virtual void abrirFichero (object sender, System.EventArgs e)
	{
		Abrir();
	}
	protected virtual void guardarFichero (object sender, System.EventArgs e)
	{
		Guardar(ruta);
	}
	
	protected virtual void guardarComo (object sender, System.EventArgs e)
	{
		GuardarComo();
	}
	
	protected virtual void newFichero (object sender, System.EventArgs e)
	{
		Nuevo();
	}	
	protected virtual void Cerrar (object sender, System.EventArgs e)
	{
		Cerrar();
	}
	
	
}

